رويدادها در برنامه های وب دات نت
رويدادها در برنامه های وب دات نت
رويداد ها در چرخه حيات يک برنامه وب
زمانيکه مرورگر دارای تگ های HTML توليده شده می باشد ، کاربر قادر به ورود اطلاعات و داده مورد نظر در Text boxs ، انتخاب دکمه ها و انجام ساير عمليات می باشد . وضعيت فوق ، تا زمانيکه يک رويداد Post-back محقق گردد ( نظير کليک نمودن بر روی يک دکمه ) ، ادامه می يابد . پس از محقق شدن رويداد Post-back ، مرورگر داده همراه صفحه ( View State ) را برای سرويس دهنده ارسال تا پردازش های لازم با توجه به رويداد محقق شده ، انجام شود. زمانيکه سرويس دهنده ، View State ( داده همراه با يک صفحه ) را دريافت می نمايد ، يک نمونه جديد از فرم وب را ايجاد و داده آن را با استفاده از View State تکميل و متناسب با رويداد محقق شده ، پردازش های لازم را انجام خواهد داد . پس از اتمام عمليات توسط سرويس دهنده ، نتايج بصورت تگ های HTML مجددا" برای مرورگر ارسال و نمونه فرم وب ايجاد شده ، از بين خواهد رفت .
زمانيکه کاربر به عمليات خود خاتمه داده و مرورگر را غير فعال می نمايد ، Session مربوط به آن نيز خاتمه می يابد . درصورتيکه Session های متعلق به ساير کاربران وجود نداشته باشد ، به حيات برنامه نيز خاتمه داده می شود ( عملا" وضعيت فوق کمتر اتفاق می افتد ) . ASP.NET با استفاده از garbage collection ، مديريت حافظه را انجام می دهد ( سرويس ارائه شده توسط CLR فريمورک دات نت ) . در فرآيند فوق ، سرويس دهنده بصورت ادواری رديابی مراجعات به اشياء را انجام و در صورتيکه از يک شی مدت زمان زيادی استفاده نشده باشد ، شی مربوطه از حافظه حذف و فضای استفاده شده توسط آن نيز آزاد می گردد . با توجه به ماهيت عمليات فوق ، نمی توان بطور دقيق از زمان محقق شدن رويداد Application_End ، آگاهی يافت .
نگهداری داده در يک فرم وب
• متغيرهای Application state . متغيرهای فوق ، برای تمامی کاربران قابل دسترس و استفاده می باشند. رفتار اين نوع متغيرها نظير متغيرهای سراسری با قابليت دستيابی چندکاربره می باشد. تمامی Sessions قادر به خواندن و نوشتن اين نوع متغيرها ، می باشند .
• متغيرهای Session state . متغيرهای فوق، صرفا" برای يک Session ( کاربر) قابل دسترس و استفاده می باشند. عملکرد اين نوع از متغيرها نظير داده های سراسری در يک برنامه استاندارد ويندوز می باشد . صرفا" Session فعال ، قابليت دستيابی به وضعيت Session خود را دارا خواهد بود .
متغيرهای Session و Application ، بصورت On the fly و از طريق کد نوشته شده در برنامه ، ايجاد می گردند ( عدم استفاده از روش های متداول بمنظور تعريف يک متغير ). در نمونه برنامه زير ، يک متغير Session با نام Clicks تعريف شده است . متغير فوق ، تعداد دفعاتی که بر روی دکمه Button1 کليک می گردد را در خود ذخيره و در نهايت مقدار مورد نظر در خروجی نمايش داده می شود .
VB.NET |
Private Sub Button1_Click ( ByVal sender As System.Object , _ |
در يک متغير وضعيت ( Session , Application) می توان هر نوع داده ئی را ذخيره نمود. ( از يک عدد صحيح ساده تا يک شی ) . با توجه به اينکه عملکرد متغيرهای وضعيت ، نظير داده های سراسری می باشد ، می بايست ،استراتژی لازم بمنظور استفاده و انجام عمليات بر روی آنان ،مشخص گردد .
رويدادهای Session و Application
رويدادهای Application ، بشرح زير می باشند :
• Application_Start : رويداد فوق ، بلافاصله پس از ملاقات صفحه شروع برنامه توسط اولين کاربر ، محقق می گردد .
• Application_End ، رويداد فوق ،زمانی محقق می گردد که کاربری به برنامه متصل ( مرتبط) نباشد.
• Application_BeginRequest : رويداد فوق ، در ابتدای هر در خواست ارسالی برای سرويس دهنده ، محقق می گردد . با حرکت بين صفحات و درخواست آنان از سرويس دهنده ، يک درخواست ايجاد و متناسب با آن ، رويداد فوق نيز محقق می گردد .
• Applicatino_EndRequest : رويداد فوق ، پس از اتمام هر درخواست ارسال شده برای سرويس دهنده ، محقق می گردد .
• Session_Start : رويداد فوق ، زمانيکه کاربری جديد ، صفحه شروع يک برنامه را ملاقات می نمايد ، محقق می گردد .
• Session_End : رويداد فوق ، پس از ترک برنامه توسط يک کاربر ، محقق می گردد( بستن مرورگر و يا پس از Time out تعريف شده )
در فرم های وب ، يک Session ، نمونه ای منحصربفرد از مرورگر می باشد .يک کاربر می تواند دارای چندين نسخه در حال اجراء از برنامه مرورگر بر روی ماشين خود باشد .در چنين وضعيتی ، در صورتيکه هر يک از مرورگرها با برنامه وب ارتباط برقرار نمايد ، هريک از آنان دارای Session منحصربفرد مربوط به خود خواهند بود .
بمنظور آشنائی با عملکرد رويدادهای فوق ، کد نوشته شده زير را در فايل Global.asax مربوط به يک پروژه فرم وب ، مستفر نمائيد .
VB.NET |
Sub Application_Start ( ByVal Sender As Object , ByVal E As EventArgs ) |
پس از اجرای کد فوق ، هر نمونه از مرورگر که به برنامه متصل گردد ،يک واحد به Session ، اضافه می گردد ( مقدار شمارنده Application همچنان يک باقی خواهد ماند ) . لازم است به اين نکته نيز اشاره گردد که اشياء ذاتی نظير Session و Response در Application_Start قابل دسترس نمی باشند .
رويدادهای فرم های وب
• Page_Init : رويداد فوق ، زمانی محقق می گردد که کنترل های سرويس دهنده ، در حافظه مستقر و از طريق view state مربوط به فرم وب ، مقداردهی اوليه گردند. (اولين مرحله در چرخه حيات يک فرم وب ).
• Page_Load : رويداد فوق ، زمانی محقق می گردد که کنترل ها ی سرويس دهنده در شی Page ، لود می گردند. اطلاعات view state ، در اين لحظه قابل دسترس و استفاده بوده و می توان در اين محل تنظيمات کنترلی لازم بمنظور نمايش متن بر روی صفحه را انجام داد ( انجام تغييرات مورد نظر).
• Page_PreRender : رويداد فوق ، زمانی محقق می گردد که برنامه درصدد Render نمودن شی Page می باشد .
• Page_Unload : رويداد فوق ، پس از خروج Page از حافظه ، محقق می گردد.
• Page_Error : رويداد فوق ، پس از مواجه شدن با يک مورد خاص و استثنائی ،محقق می گردد .
• Page_AbortTransaction : رويداد فوق ، پس از توقف يک تراکنش ، محقق می گردد.
• Page_CommitTransaction : رويداد فوق ، پس از پذيرش يک تراکنش ، محقق می گردد.
• Page_DataBinding : رويداد فوق ، پس از نسبت دهی يک کنترل سرويس دهنده به يک منبع داده بر روی يک صفحه ، محقق می گردد.
• Page_Dispose : رويداد فوق ،پس از آزاد سازی يک شی Page از حافظه ، محقق می گردد (آخرين رويداد مرتبط با چرخه حيات يک شی Page ) .
از رويداد Page_Load بهمراه خصلت IsPostBack ، می توان بمنظور مقداردهی اوليه داده ، در اولين مرتبه ای که کاربران يک فرم وب را مشاهده می نمايند ، استفاده نمود.
رويدادهای کنترل سرويس دهنده
• رويدادهای Post-Back : رويدادها ی فوق ، باعث ارسال صفحه وب برای سرويس دهنده بمنظور انجام پردازش های ضروری می گردند. اين نوع از رويدادها ، ترافيکی را بين سرويس گيرنده و سرويس دهنده ، ايجاد می نمايند ( توجه به اثرات ترافيک ايجاد شده بر کارآئی برنامه ) .
• رويدادهای Cached : اين نوع از رويدادها ، در View state مربوط به صفحه ذخيره تا زمانيکه يک رويداد Post_Back محقق گردد .
• رويدادهای Validation : رويدادهای فوق ، بدون اينکه ضرورتی به انجام Post-Back و يا Cache وجود داشته باشد ، از طريق امکانات پيش بينی شده درون صفحه ، با آنان برخورد خواهد شد .کنترل های سرويس دهنده Validation از رويدادهای فوق ،استفاده می نمايند .
کنترل های Validation ، قبل از اينکه صفحه برای سرويس دهنده Post-Back شوند، بررسی می گردند . زمانيکه Post-Back محقق می گردد ، رويدادهای Page_init و Page_Load ، پردازش و در ادامه رويدادهای Cache و نهايتا" رويدادی که باعث Post-Back شده است ، پردازش می گردد . کنترل های Button ، Link Button ,Image Button ، از جمله کنترل هائی می باشند که باعث تحقق يک رويداد Post-Back ، می گردند . کنترل های . TextBox,DropDownList,ListBox,RadioButton و CheckBox ، باعث ايجاد رويدادهائی از نوع Cache خواهند شد .
فرض کنيد ، يک فرم وب بهمراه چهار TextBox و يک دکمه OK بر روی آن را داشته باشيم . در چنين حالتی ، اگر TextBox خالی بماند ، و دکمه OK کليک گردد ، RequiredFieldValidator نمايش داده شده و رويداد ديگری پردازش نشده و صفحه برای سرويس دهنده PostBack نخواهد شد. درصورتيکه مقداری در TextBox درج و دکمه OK فعال گردد ، صفحه PostBack شده و رويداد TextChanged ، قبل از رويداد Click محقق می گردد. برنامه زير واکنش لازم را در اين راستا انجام خواهد داد ( کليک بر روی دکمه Button1 و يا تغيير مقدار TextBox1 ).
VB.NET |
Private Sub Button1_Click ( ByVal sender As System.Object ,_ |
{{Fullname}} {{Creationdate}}
{{Body}}